package sao.controlador;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import sao.modelo.AgendaDiaria;
import sao.modelo.UsuarioMedico;
import sao.visao.AgendaDiariaVisao;

/**
 * Servlet implementation class AgendaDiariaController
 */
public class AgendaDiariaController extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Verifica autenticação do usuário
		HttpSession sessao = request.getSession(false);
		if (sessao == null) {
			despachaUsuario(request, response, "login.jsp");
		}
		
		// Verifica permissão do usuário
		/*
		Usuario usuario = (Usuario) sessao.getAttribute("usuario");
		if (!usuario.getPerfil().isOperacaoValida("agendarConsultaPropria")) {
			request.setAttribute("mensagemErro", "ERRO: Você não tem permissão para efetuar esta operação!");
			despachaUsuario(request, response, "erro.jsp");
		}
		*/
		
		// Captura a duração de cada consulta do contexto da aplicação
		int duracaoConsulta = Integer.parseInt(getServletContext().getInitParameter("duracaoConsulta"));
		
		// Captura o ano, mês e dia da agenda diária
		String ano, mes, dia;
		ano = request.getParameter("ano");
		mes = request.getParameter("mes");
		dia = request.getParameter("dia");
		// Testa os dados recebidos
		if (ano == null || mes == null || dia == null) {
			request.setAttribute("mensagemErro", "Erro ao receber os dados do ano, mês e dia.");
			despachaUsuario(request, response, "erro.jsp");
		}
		
		// Cria a nova agenda
		// Captura o médico
		UsuarioMedico medico = (UsuarioMedico) sessao.getAttribute("medico");
		try {
			
			AgendaDiaria agendaDiaria = new AgendaDiaria(Integer.parseInt(ano), 
					Integer.parseInt(mes), Integer.parseInt(dia), medico, duracaoConsulta);
			AgendaDiariaVisao adv = new AgendaDiariaVisao(agendaDiaria.getAgenda());
			request.setAttribute("htmlAgenda", adv.getHtmlAgenda());
			request.setAttribute("tamanhoAgenda", agendaDiaria.size());
			request.setAttribute("dataAgendamento", dia + "/" + mes + "/" + ano);
			despachaUsuario(request, response, "agendaDiaria.jsp");
			
		} catch (NumberFormatException e) {
			e.printStackTrace();
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		} catch (SQLException e) {
			e.printStackTrace();
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		}
		
	}//FIM método doGet

	
	/**
	 * Envia o usuário a alguma página, dependendo se sua autenticação
	 * foi ou não aceita
	 * @param request
	 * @param response
	 * @param pagina
	 */
	private void despachaUsuario(HttpServletRequest request,
			HttpServletResponse response, String pagina) {
		RequestDispatcher view = request.getRequestDispatcher(pagina);
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario

	
	/**
	 * Envia o usuário a página de erro padrão com alguma mensagem
	 * @param request
	 * @param response
	 * @param mensagemErro - Uma mensagem de erro a ser exibida ao usuário
	 */
	private void despachaUsuarioPaginaErro(HttpServletRequest request,
			HttpServletResponse response, String mensagemErro) {
		request.setAttribute("mensagemErro", mensagemErro);
		RequestDispatcher view = request.getRequestDispatcher("erro.jsp");
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario
	
	
}//FIM classe AgendadiariaController
